1. Field of the Invention
The present invention relates to the field of software. More specifically, the present invention relates to software portability.
2. Description of the Related Art
In general, compiling code involves front-end compiler tasks and back-end compiler tasks. Typically, front-end compiler tasks are platform independent tasks that analyze source code in accordance with the governing language. The back-end compiler tasks are typically platform dependent tasks that process the result of the front-end compiler tasks to generate an executable file for a target platform. For example, in a conventional configuration, a compiler is invoked for one or more source code files to generate an executable file. The compiler performs preprocessing, which includes macro substitution, inclusion of named files, and conditional compilation. After preprocessing, the compiler performs the front-end compiler tasks, which include lexical analysis, syntax analysis, and semantic analysis. During lexical analysis, the compiler breaks the source code into lexical tokens, which are passed to a parser. The parser performs syntax analysis and semantic analysis of the lexical tokens. Semantic analysis may include some platform independent optimizations. Upon completion of the front-end compiler tasks, the compiler generates an intermediate code that is equivalent to the source code. The compiler then performs the back-end compiler tasks with the intermediate code. Platform dependent optimizations are made to the intermediate code. Finally, the compiler translates the optimized intermediate code into the machine language of the target platform.
If an application will be provided for different platforms, then typically the source code of the application is compiled for each target platform. The executable code is not itself suitable for execution on differing platforms and the executable code does not include information sufficient to allow compilation or re-compilation of executable code for a new target platform. As a result, an end-user cannot recompile their application to take advantage of a newer platform and/or migrate to a different platform without the source code. Accordingly, a technique is desired that better facilitates portability of executable code.